mirror of
https://github.com/2martens/uni.git
synced 2026-05-06 19:36:26 +02:00
Merge branch 'master' of github.com:frmwrk123/uni
This commit is contained in:
@ -5,7 +5,6 @@
|
|||||||
// hardware pins
|
// hardware pins
|
||||||
int ledPin = 13;
|
int ledPin = 13;
|
||||||
int analogLevel = 0;
|
int analogLevel = 0;
|
||||||
|
|
||||||
int slaveAddress = 4;
|
int slaveAddress = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -14,12 +13,18 @@ int slaveAddress = 4;
|
|||||||
void setup() {
|
void setup() {
|
||||||
// Configure pins
|
// Configure pins
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
Wire.onReceive(receiveEvent);
|
pinMode(ledPin, OUTPUT);
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
// initialize serial port
|
// initialize serial port
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void writeResult(bool result)
|
||||||
|
{
|
||||||
|
Serial.print("Result: ");
|
||||||
|
Serial.println(result ? "on" : "off");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loop function for main code
|
* Loop function for main code
|
||||||
*/
|
*/
|
||||||
@ -28,23 +33,21 @@ void loop() {
|
|||||||
Wire.write(1);
|
Wire.write(1);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
delay(100);
|
delay(100);
|
||||||
Wire.beginTransmission(slaveAddress);
|
Wire.requestFrom(slaveAddress, 1);
|
||||||
Wire.write('r');
|
if (Wire.available()) {
|
||||||
Wire.endTransmission();
|
int x = Wire.read();
|
||||||
|
writeResult((bool) x);
|
||||||
|
}
|
||||||
delay(1900);
|
delay(1900);
|
||||||
Wire.beginTransmission(slaveAddress);
|
Wire.beginTransmission(slaveAddress);
|
||||||
Wire.write(0);
|
Wire.write(0);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
delay(100);
|
delay(100);
|
||||||
Wire.beginTransmission(slaveAddress);
|
Wire.requestFrom(slaveAddress, 1);
|
||||||
Wire.write('r');
|
if (Wire.available()) {
|
||||||
Wire.endTransmission();
|
int x = Wire.read();
|
||||||
|
writeResult((bool) x);
|
||||||
|
}
|
||||||
delay(1900);
|
delay(1900);
|
||||||
}
|
}
|
||||||
|
|
||||||
void receiveEvent(int readBytes)
|
|
||||||
{
|
|
||||||
int x = Wire.read();
|
|
||||||
Serial.print("Result: ");
|
|
||||||
Serial.println(x ? "on" : "off");
|
|
||||||
}
|
|
||||||
|
|||||||
150
es/blatt4/uebung4-3/uebung4-3.ino
Normal file
150
es/blatt4/uebung4-3/uebung4-3.ino
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#include <Servo.h>
|
||||||
|
#include <Wire.h>
|
||||||
|
// these variables describe the used hardware pins
|
||||||
|
// adjust them when you use other pins
|
||||||
|
// hardware pins
|
||||||
|
int az = 50;
|
||||||
|
int xout = A4;
|
||||||
|
int zout = A2;
|
||||||
|
int vref = A3;
|
||||||
|
int ledPin = 13;
|
||||||
|
int slaveAddress = 4;
|
||||||
|
// servo
|
||||||
|
Servo ourServo;
|
||||||
|
int servoPin = 11;
|
||||||
|
// used to achieve a 10 Hz frequency
|
||||||
|
// don't touch them
|
||||||
|
long rc = 1049999;
|
||||||
|
// flags for servo
|
||||||
|
bool volatile cwMaxReached = false;
|
||||||
|
bool volatile ccwMaxReached = false;
|
||||||
|
bool volatile lightLED = false;
|
||||||
|
bool volatile read_ready = false;
|
||||||
|
|
||||||
|
// tmp variables
|
||||||
|
int volatile zAxis = 0;
|
||||||
|
int volatile ref = 0;
|
||||||
|
double volatile differenceZRef = 0;
|
||||||
|
double volatile rotationZ = 0;
|
||||||
|
int volatile currentServoPos = 0;
|
||||||
|
int volatile newServoPos = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the servo position.
|
||||||
|
*
|
||||||
|
* @param int currentServoPos
|
||||||
|
* @param int rotationZ
|
||||||
|
*/
|
||||||
|
int calculate_new_servo_pos(int currentServoPos, int rotationZ) {
|
||||||
|
int newServoPos = currentServoPos + rotationZ;
|
||||||
|
// faktor 10 zu gross (weil messung grad/sec
|
||||||
|
|
||||||
|
if (newServoPos > 159) {
|
||||||
|
newServoPos = 159;
|
||||||
|
cwMaxReached = true;
|
||||||
|
lightLED = true;
|
||||||
|
}
|
||||||
|
if (newServoPos < 25) {
|
||||||
|
newServoPos = 25;
|
||||||
|
ccwMaxReached = true;
|
||||||
|
lightLED = true;
|
||||||
|
}
|
||||||
|
return newServoPos;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Setup function for initial setup code
|
||||||
|
*/
|
||||||
|
void setup() {
|
||||||
|
Wire.begin();
|
||||||
|
|
||||||
|
pmc_set_writeprotect(false);
|
||||||
|
pmc_enable_periph_clk(ID_TC1);
|
||||||
|
// configure hardware timer
|
||||||
|
TC_Configure(TC0, 1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2) ;
|
||||||
|
TC_SetRC(TC0, 1, rc);
|
||||||
|
TC0->TC_CHANNEL[1].TC_IER = TC_IER_CPCS; // IER = interrupt enable register
|
||||||
|
TC0->TC_CHANNEL[1].TC_IDR = ~TC_IER_CPCS;
|
||||||
|
NVIC_ClearPendingIRQ(TC1_IRQn);
|
||||||
|
NVIC_EnableIRQ(TC1_IRQn);
|
||||||
|
// start hardware timer
|
||||||
|
TC_Start(TC0, 1);
|
||||||
|
|
||||||
|
pinMode(ledPin, OUTPUT);
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
|
ourServo.attach(servoPin);
|
||||||
|
ourServo.write(90);
|
||||||
|
// initialize serial port
|
||||||
|
Serial.begin(9600);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Loop function for main code
|
||||||
|
*/
|
||||||
|
void loop() {
|
||||||
|
if (read_ready) {
|
||||||
|
|
||||||
|
// berechnung auf 5000/1024 umstellen - was hat volt mit der berechnung zu tun? warscheinlich steht das so im aufgabenblatt ?
|
||||||
|
Serial.print("rotationZ: ");
|
||||||
|
Serial.println(rotationZ);
|
||||||
|
|
||||||
|
Serial.print("currentServoPos: ");
|
||||||
|
Serial.println(currentServoPos);
|
||||||
|
Serial.print("newServoPos: ");
|
||||||
|
Serial.println(newServoPos);
|
||||||
|
/*
|
||||||
|
if (lightLED) {
|
||||||
|
blink();
|
||||||
|
}*/
|
||||||
|
ourServo.write(newServoPos + 1);
|
||||||
|
read_ready = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Used to handle the timer.
|
||||||
|
*/
|
||||||
|
void TC1_Handler()
|
||||||
|
{
|
||||||
|
// request static for some magic behind the curtain
|
||||||
|
TC_GetStatus(TC0, 1);
|
||||||
|
read_ready = true;
|
||||||
|
requestValues();
|
||||||
|
//zAxis = analogRead(zout);
|
||||||
|
//ref = analogRead(vref);
|
||||||
|
//differenceZRef = zAxis - ref;
|
||||||
|
differenceZRef = (differenceZRef * 5000) / 1024;
|
||||||
|
rotationZ = (differenceZRef / 9.1);
|
||||||
|
if (fabs(rotationZ) > 4) {
|
||||||
|
currentServoPos = ourServo.read();
|
||||||
|
newServoPos = calculate_new_servo_pos(currentServoPos, rotationZ / 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void requestValues()
|
||||||
|
{
|
||||||
|
// request zAxis
|
||||||
|
Wire.requestFrom(slaveAddress, 4);
|
||||||
|
int result = 0;
|
||||||
|
int i = 1;
|
||||||
|
while (Wire.available()) {
|
||||||
|
uint8_t x = (uint8_t) Wire.read();
|
||||||
|
result = result | ((x) << ((sizeof(int) - i)*8));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
differenceZRef = (double) result;
|
||||||
|
Serial.print("Got: ");
|
||||||
|
Serial.println(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
void blink(){
|
||||||
|
digitalWrite(ledPin, HIGH);
|
||||||
|
delay(10);
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
|
delay(10);
|
||||||
|
digitalWrite(ledPin, HIGH);
|
||||||
|
delay(10);
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
|
delay(10);
|
||||||
|
digitalWrite(ledPin, HIGH);
|
||||||
|
delay(10);
|
||||||
|
digitalWrite(ledPin, LOW);
|
||||||
|
lightLED = false;
|
||||||
|
}
|
||||||
126
es/blatt5/uebung5-1/uebung5-1.ino
Normal file
126
es/blatt5/uebung5-1/uebung5-1.ino
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
#include <SPI.h>
|
||||||
|
|
||||||
|
// pins
|
||||||
|
int slaveSelectPin = 10;
|
||||||
|
int rstPin = 6;
|
||||||
|
int dcPin = 5;
|
||||||
|
|
||||||
|
// constants
|
||||||
|
int divider = 84;
|
||||||
|
int maxBufferIndex = 288;
|
||||||
|
|
||||||
|
// buffer
|
||||||
|
char screenBuffer[288];
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
// intialize SPI
|
||||||
|
SPI.begin(slaveSelectPin);
|
||||||
|
SPI.setClockDivider(slaveSelectPin, divider);
|
||||||
|
|
||||||
|
// initialize pins
|
||||||
|
pinMode(dcPin, OUTPUT);
|
||||||
|
pinMode(rstPin, OUTPUT);
|
||||||
|
|
||||||
|
// initial reset of display
|
||||||
|
resetDisplay();
|
||||||
|
|
||||||
|
// initialization of display
|
||||||
|
digitalWrite(dcPin, LOW);
|
||||||
|
SPI.transfer(slaveSelectPin, 0x21);
|
||||||
|
SPI.transfer(slaveSelectPin, 0x14);
|
||||||
|
SPI.transfer(slaveSelectPin, 0xb0);
|
||||||
|
SPI.transfer(slaveSelectPin, 0x20);
|
||||||
|
SPI.transfer(slaveSelectPin, 0x0c);
|
||||||
|
digitalWrite(dcPin, HIGH);
|
||||||
|
|
||||||
|
// initialize screen buffer
|
||||||
|
for (int i = 0; i < maxBufferIndex; i++) {
|
||||||
|
screenBuffer[i] = 0x0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loop function for main code
|
||||||
|
*/
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
for (int y = 0; y < 84; y++) {
|
||||||
|
for (int x = 0; x < 48; x++) {
|
||||||
|
setPixel(x, y, 1);
|
||||||
|
}
|
||||||
|
flushBuffer();
|
||||||
|
delay(20);
|
||||||
|
}
|
||||||
|
//flushBuffer();
|
||||||
|
//delay(20);
|
||||||
|
Serial.println("fertig");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetDisplay()
|
||||||
|
{
|
||||||
|
digitalWrite(rstPin, LOW);
|
||||||
|
delay(500);
|
||||||
|
digitalWrite(rstPin, HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void flushBuffer()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < maxBufferIndex; i++) {
|
||||||
|
SPI.transfer(slaveSelectPin, screenBuffer[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the pixel at the given location.
|
||||||
|
* @param x
|
||||||
|
* @param y
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
void setPixel(int x, int y, int value)
|
||||||
|
{
|
||||||
|
int bank = x / 8;
|
||||||
|
int relativeRow = x - bank * 8;
|
||||||
|
int bankStartIndex = bank * 48;
|
||||||
|
int index = bankStartIndex + y;
|
||||||
|
char bitValue = 0x0;
|
||||||
|
|
||||||
|
if (value == 1) {
|
||||||
|
bitValue = 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
char existingValue = screenBuffer[index];
|
||||||
|
char pixelMask = 1 << relativeRow;
|
||||||
|
pixelMask = 0x0 | pixelMask;
|
||||||
|
char invMask = ~ pixelMask;
|
||||||
|
char newValue = pixelMask & bitValue;
|
||||||
|
|
||||||
|
char finalExistingValue = existingValue & invMask;
|
||||||
|
char finalValue = finalExistingValue | newValue;
|
||||||
|
|
||||||
|
Serial.print("bank:");
|
||||||
|
Serial.println(bank);
|
||||||
|
Serial.print("relRow:");
|
||||||
|
Serial.println(relativeRow);
|
||||||
|
Serial.print("index:");
|
||||||
|
Serial.println(index);
|
||||||
|
Serial.print("value:");
|
||||||
|
Serial.println(value);
|
||||||
|
Serial.print("existingValue:");
|
||||||
|
Serial.println(existingValue, BIN);
|
||||||
|
Serial.print("finalExistingValue:");
|
||||||
|
Serial.println(finalExistingValue, BIN);
|
||||||
|
Serial.print("pixelMask:");
|
||||||
|
Serial.println(pixelMask, BIN);
|
||||||
|
Serial.print("invMask:");
|
||||||
|
Serial.println(invMask, BIN);
|
||||||
|
Serial.print("newValue:");
|
||||||
|
Serial.println(newValue, BIN);
|
||||||
|
Serial.print("finalValue:");
|
||||||
|
Serial.println(finalValue, BIN);
|
||||||
|
Serial.println("-----");
|
||||||
|
screenBuffer[index] = finalValue;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user