123
Dependencies: TM1638 mbed HCSR04
Revision 1:63541cb7c9d0, committed 2019-04-08
- Comitter:
- lucem1n
- Date:
- Mon Apr 08 15:06:22 2019 +0000
- Parent:
- 0:6f4090a07409
- Commit message:
- 132
Changed in this revision
--- a/IR_Def.lib Sat Mar 02 12:48:15 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/users/lucem1n/code/IR_Def/#0bd2c7cdfcb4
--- a/RemoteIR.lib Sat Mar 02 12:48:15 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://os.mbed.com/users/shintamainjp/code/RemoteIR/#268cc2ab63bd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TM1638.lib Mon Apr 08 15:06:22 2019 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/wim/code/TM1638/#b2bbdc58967e
--- a/main.cpp Sat Mar 02 12:48:15 2019 +0000
+++ b/main.cpp Mon Apr 08 15:06:22 2019 +0000
@@ -1,178 +1,93 @@
#include "mbed.h"
-#include "IR_Def.h"
#include "hcsr04.h"
-
-#define CAT0_PIN PC_1 // 11 PC_3 переставили с катодом 7
-#define CAT1_PIN PC_3 // 7 PC_2 переставили с катодом 6
-#define CAT2_PIN PB_0 // 4 PF_5 переставили с катодом 5
-#define CAT3_PIN PC_2 // 2 PA_0 переставили с катодом 4
-#define CAT4_PIN PA_4 // 1 PF_10
-#define CAT5_PIN PA_1 // 10 PF_2
-#define CAT6_PIN PC_0 // 5 PD_5
-#define CAT7_PIN PF_1 // 3 PH_0
+#include "TM1638.h"
-#define ANO0_PIN PB_4 // 12 PC_0
-#define ANO1_PIN PB_5 // 9 PF_3
-#define ANO2_PIN PB_3 // 8 PB_0
-#define ANO3_PIN PB_10 // 6 PA_3
-
-//------------------------------------
-// Hyperterminal configuration
-// 9600 bauds, 8-bit data, no parity
-//------------------------------------
Serial pc(SERIAL_TX, SERIAL_RX);
-InterruptIn IR(PC_12);
-DigitalOut myled(LED1);
-Timer T;
-Ticker system_clock;
-Ticker pult; //This will be used to increment a counter every msec inside it's ISR
-Ticker display;
+DigitalOut led1(PC_10);
Ticker distancee;
-Ticker muzika;
AnalogOut Da(PA_5);
+/*********************************************************************************************************************/
+//Display
+TM1638::KeyData_t keydata;
+TM1638_LEDKEY8 LEDKEY8(PB_5,PB_4,PB_3,PA_10);
+/*********************************************************************************************************************/
+//PULT
+/*InterruptIn D(PA_14); //D //D1
+InterruptIn A(PA_13); //A //D2
+InterruptIn B(PA_15); //B //D0
+InterruptIn C(PC_12); //C //D3*/
+/********************************************************************************************************************/
//DigitalOut myled(LED2);
-DigitalOut cathodes[8] = {
- DigitalOut(CAT0_PIN),
- DigitalOut(CAT1_PIN),
- DigitalOut(CAT2_PIN),
- DigitalOut(CAT3_PIN),
- DigitalOut(CAT4_PIN),
- DigitalOut(CAT5_PIN),
- DigitalOut(CAT6_PIN),
- DigitalOut(CAT7_PIN),
-};
-DigitalOut anodes[4] = {
- DigitalOut(ANO0_PIN),
- DigitalOut(ANO1_PIN),
- DigitalOut(ANO2_PIN),
- DigitalOut(ANO3_PIN),
-};
-int p = 0;
-int o=0;
-void IR_ISR(); //ISR for decoding the IR signal
-void dummy_ISR(); //Required so that 'IR_ISR' is not called on both rising and falling edges of IR signal at the same time
-void sys_tick();
-int v=0;
-uint8_t state = 0; //State variable for IR state machine
-uint8_t Rx_count = 0; //Counter to count no. of bits received
-uint32_t Rx_buf = 0; //To store recevied IR data
-char Rx_flag = 0; //Flag which indicates that a valid IR command was received
-uint32_t Rx_rep_count = 0; //To keep track of how many repeat pulses are received
-uint32_t Rx_rep_timeout_count = 0; //Timer which clears the previously received IR command, once it reaches the set limit
-uint32_t T_buf = 0; //Buffer to hold value of timer T
-char Rx_ignore_rep_flag = 0; //0 => Do not ignore repeat pulses
-
-uint8_t digits[] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09, 0xFD, 0x91,0x89, 0x83};
//DigitalOut trig(PA_3);
//DigitalIn echo(PD_7);
HCSR04 usensor(PB_13,PB_14);
unsigned int dist=0;
int flag1, flag2, flag3 = 0;
int i,j,k,m,size=0;
-
-void fireUpSign(int signNum){
- anodes[signNum] = 1;
-}
+int a,b,c,d,e,f,g,h = 0;
-void shutDownSign(int signNum){
- anodes[signNum] = 0;
-}
-void setDigit(int digit){
- for(int isd=0; isd < 8; isd++){
- ((digits[digit] & (1<<(7-isd))) > 0) ? cathodes[isd] =1 : cathodes[isd] =0;
- }
+/*void BB() {
+ led1 = !led1;
}
-void fireUpAllSigns(){
- fireUpSign(0);
- fireUpSign(1);
- fireUpSign(2);
- fireUpSign(3);
-}
-
-void shutDownAllSigns(){
- shutDownSign(0);
- shutDownSign(1);
- shutDownSign(2);
- shutDownSign(3);
+void DD() {
+ led1= !led1;
}
-void ddisplay ()
-{
- setDigit(p);
- fireUpSign(3);
- wait_us(3000);
- shutDownAllSigns();
- setDigit(i);
- fireUpSign(2);
- wait_us(3000);
- shutDownAllSigns();
- setDigit(j);
- fireUpSign(1);
- wait_us(3000);
- shutDownAllSigns();
- setDigit(k);
- fireUpSign(0);
- wait_us(3000);
- shutDownAllSigns();
- //IR.fall(&IR_ISR);
- //IR.rise(&dummy_ISR);
- if(i>9)
- {
- j++;
- i=0;
- }
- if(j>9)
- {
- k++;
- j=0;
- i=0;
- }
- /*if(i == 1)
- {
- myled = !myled;
- wait_ms(300);
- i = 0;
- }*/
- }
+void AA() {
+ led1 = !led1;
+}
+void CC() {
+ led1 = !led1;
+}*/
+
void ddistance ()
{
usensor.start();
dist=usensor.get_dist_cm();
- //IR.fall(&IR_ISR);
- //IR.rise(&dummy_ISR);
}
-
-void sys_tick()
-{
- if(Rx_rep_timeout_count < 0xFFFF) { //Do not increment counter beyond 0xFFFF to prevent roll-over
- ++Rx_rep_timeout_count; //Increment this counter every 1msec.
- }
-}
-void ppult ()
+void sbros ()
+{
+ a=0;
+ b=0;
+ c=0;
+ d=0;
+ e=0;
+ f=0;
+ g=0;
+ h=0;
+ }
+void perebros ()
{
- // if(o==0)
- // {
- //IR.mode(PullNone);
- //wait_ms(20);
- // IR.fall(&IR_ISR);
- // IR.rise(&dummy_ISR);
-// }
-}
+ if(h>9)
+ {
+ g++;
+ h=0;
+ if(g>9)
+ {
+ f++;
+ g=0;
+ h=0;
+ if(f>9)
+ {
+ sbros();
+ }
+ }
+
+ }
+ }
int main()
{
+ /* B.rise(&BB);
+ D.rise(&DD);
+ A.rise(&AA);
+ C.rise(&CC);*/
int verh;
int nij;
while(1) {
- //if (o==0)
- // {
- // display.attach(&ddisplay, 0.02);
- // distancee.attach(&ddistance, 0.02);
- // pult.attach(&ppult, 2);
- ddisplay ();
- ddistance();
- // }
+ ddistance();
+ LEDKEY8.printf ("%d%d%d%d%d%d%d%d", a, b, c, d, e, f, g, h);
verh = 80;
nij = 10;
if(dist >verh)
@@ -192,202 +107,62 @@
flag1=0;
flag2=0;
flag3=0;
- i++;
+ h++;
+ perebros();
}
- if (v==1)
- {
- // pc.printf(" RX= %x " , Rx_buf);
-
-
- if(Rx_buf == 0xbf40ff00)
- {
- //pc.printf("5");
- p=0;
- j=0;
- i=0;
- k=0;
-
- }
-
- if(Rx_buf == 0xf609ff00)
- {
- i++;
- if(i>9)
- {
- j++;
- i=0;
- }
- if(j>9)
+ if (LEDKEY8.getKeys(&keydata)) {
+ // pc.printf("Keydata 0..3 = 0x%02x 0x%02x 0x%02x 0x%02x\r\n", keydata[0], keydata[1], keydata[2], keydata[3]);
+ if (keydata[0] == 0x01) { //sw1
+ int k;
+ k=h;
+ h++;
+ if(h-k==1)
+ {
+ wait(0.3);
+ perebros();
+ }
+ }
+ if (keydata[1] == 0x01) { //sw1
+ sbros();
+ }
+ if (keydata[2] == 0x01) { //sw1
+ if (e<9)
{
- k++;
- j=0;
- i=0;
- }
- {
- }
- // pc.printf("9");
- }
-
- if(Rx_buf == 0xf807ff00)
- {
- //pc.printf("7");
- if (p>9)
+ e++;
+ wait(0.3);
+ }
+ else e=0;
+ }
+ if (keydata[3] == 0x01) {
+ /*if(h+g+f<e)
{
- p=0;
- }
- else
+ h=0;
+ g=0;
+ f=0;
+ e=0;
+ } */
+ if(h>=e)
+ {
+ h=h-e;
+ }
+ else if(h<e)
+ {
+ if(g==0)
+ {
+ f=f-1;
+ g=g+10-(e-h);
+ h=h+10;
+ h=h-g;
+ }
+ else if(g!=0)
{
- p++;
- }
- }
-
- if(Rx_buf == 0xe619ff00)
- {
- if(i==0 && j==0 && k==0 && (i+j+k)-p<0 && i-p<0)
- {
- i=0;
- j=0;
- k=0;
- p=0;
- }
- if(i>=p)
- {
- i=i-p;
- }
- else if(i<p)
- {
- if(j==0)
- {
- k=k-1;
- j=j+10-(p-i);
- i=i+10;
- i=i-p;
- }
- else if(j!=0)
- {
- i=i+10;
- i=i-p;
- j=j-1;
+ h=h+10;
+ h=h-e;
+ g=g-1;
}
- }
-
-
- //pc.printf("0");
- }
- v=0;
- }
-
- // if(o==0)
- // {
- //IR.mode(PullNone);
- wait_ms(10);
- IR.fall(&IR_ISR);
- IR.rise(&dummy_ISR);
- //}
- }
-}
-
-void dummy_ISR()
-{
- //Do nothing
-}
-
-void IR_ISR()
-{
- o=1;
- display.detach();
- distancee.detach();
- //pult.detach();
- if(state == 0) {
- T.stop(); //Stop timer
- T.reset(); //Reset timer
- T.start(); //Start timer
- IR.rise(&IR_ISR); //Set IR interrupt to occur on rising edge
- IR.fall(&dummy_ISR);
- state = 1; //Go to next state
- Rx_count = 0; //Clear the received bits counter
- } else if(state == 1) {
-
- T.stop(); //Stop timer
- T_buf = (uint32_t)T.read_us(); //Read timer
- T.reset(); //Reset timer
- T.start(); //Start timer
- IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
- IR.rise(&dummy_ISR);
-
- if(T_buf <= IR_9000us_UL && T_buf >= IR_9000us_LL) { //Check for preamble start pulse(9ms)
- state = 2; //Go to next state
- } else {
- state = 0; //Reset the state machine
- }
- } else if(state == 2) {
-
- T.stop(); //Stop timer
- T_buf = (uint32_t)T.read_us(); //Read the value in timer
- T.reset(); //Reset timer
- T.start(); //Start timer
- IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
- IR.rise(&dummy_ISR);
-
- if(T_buf <= IR_4500us_UL && T_buf >= IR_4500us_LL) { //Check for preamble space(4.5ms)
-
- state = 3; //Go to next state
- Rx_rep_timeout_count = 0; //Reset counter
- Rx_rep_count = 0; //Reset the repeat pulse counter
- } else if(T_buf <= IR_2250us_UL && T_buf >= IR_2250us_LL) { //Check for repeat pulse(2.25ms)
- state = 0; //Reset the state machine
-
- if(Rx_rep_count < 0xFFFF) {
- if(Rx_rep_timeout_count < IR_rep_timeout_ms) { //Only increment the repeat pulse counter if the delay between two successive repeat pulses is less than 135msec.
- Rx_rep_timeout_count = 0; //Reset the counter everytime a valid repeat pulse is received
- ++Rx_rep_count;
- } else { //Invald repeat pulse received
- Rx_rep_count = 0; //Reset counter
- Rx_flag = 0; //Clear the flag to indicate that an IR command was not received
- Rx_buf = 0; //Clear the previously received command
}
- }
- goto ahead; //Repeat the previous command
- } else { //Wrong pulse
- Rx_rep_count = 0; //Reset counter
- state = 0; //Reset the state machine
- }
- } else if(state == 3) {
- T.stop(); //Stop timer
- T_buf = T.read_us(); //Read the value in timer
- T.reset(); //Reset timer
- T.start(); //Start timer
- IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
- IR.rise(&dummy_ISR);
-v=1 ;
-
- if(T_buf <= IR_1_UL_us && T_buf >= IR_1_LL_us) { //Check if bit is '1'(2.25ms)
- ++Rx_count; //Increment the bit counter
- Rx_buf >>= 1;
- Rx_buf |= 0x80000000; //Shift in a '1' from the left side
-
- state = 3; //Remain in current state
- } else if(T_buf <= IR_0_UL_us && T_buf >= IR_0_LL_us) { //Check if bit is '0'(1.12ms)
- ++Rx_count; //Increment the bit counter
- Rx_buf >>= 1; //Shift in a '0' from the left side
- state = 3; //Remain in current state
- } else { //Invalid data received
- Rx_count = 0;//Reset the bit counter
- state = 0; //Reset state m/c
-
- }
-
- if(Rx_count == 32) { //Check if all 32 bits have been received
- state = 0;
- //Reset state m/c
-
-ahead:
-
- if(!((Rx_rep_count > 0) && (Rx_ignore_rep_flag == 1))) {
- Rx_flag = 1; //Set this flag for repeat pulses only if repeat pulses are to be considered
- }
- Rx_rep_timeout_count = 0; //Reset the counter everytime a valid command is received
+ wait(0.3);
+ }
}
}
- o=0;
-}
+}
\ No newline at end of file